﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BE;
using Mapeo;
using System.Collections;
using System.Data;
using AjaxControlToolkit;
using BL;
using NHibernate;
using DAL;


namespace UI.DireccionAcademica
{
    public partial class FrmRegularizarDesaprobados : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                String a="es postasvdhgsa";
            }
            else {
                String b="es postasvdhgsa";
            }

        }
        NotaDesaprobados_BL notades = new NotaDesaprobados_BL();

        public void RefrescarTablas()
        {
            List<ListadoNotasDesaprobadas> listado = new List<ListadoNotasDesaprobadas>();
            listado = notades.ObtenerListadoNotasDesaprobadas(LabelCodigo.Text, "");
            if (listado == null)
            {
                gridListaDesaprobados.Caption = "No se encontraron resultados";
                return;
            }
            LLenarTablaNotas(listado);
            LLenarTablaPromedios(LabelCodigo.Text);
        }


        protected void btnBuscar_Click1(object sender, EventArgs e)
        {
            //System.Threading.Thread.Sleep(3000);
            List<ListadoNotasDesaprobadas> listado = new List<ListadoNotasDesaprobadas>();
            try
            {
             



                listado = notades.ObtenerListadoNotasDesaprobadas(txtCodigo.Text, txtNombre.Text);
                if (listado == null)
                {
                    gridListaDesaprobados.Caption = "No se encontraron resultados";
                    return;
                }
                LLenarTablaNotas(listado);

                String CodigoAlumno = "";


                foreach (ListadoNotasDesaprobadas item in listado)
                {
                    CodigoAlumno = item.COD_ALUMNO;
                    break;
                }


                Alumno alumno = notades.obtenerAlumno(txtCodigo.Text);
                if (alumno == null)
                {
                    gridListaDesaprobados.Caption = "Codigo No existente";
                    return;
                }

                LabelCodigo.Text = alumno.ID;
                LabelNombre.Text = alumno.APEPAT + " " + alumno.APEMAT + " ," + alumno.NOMBRE;
                LabelEspecialidad.Text = alumno.Especialidad.DESCRIPCCION;

                LLenarTablaPromedios(alumno.ID);


            }
            catch (Exception Ex)
            {
                LabelResultados.Text = Ex.Message;
            }


        }

        private void LLenarTablaNotas(List<ListadoNotasDesaprobadas> lista)
        {
            gridListaDesaprobados.DataSource = lista;
            gridListaDesaprobados.DataBind();
        }

        private void LLenarTablaPromedios(String CodigoAlumno)
        {
            List<ListadoPromedioSemestral> listaPromedios = notades.ObtenerPromedioAlumno(CodigoAlumno);
            if (listaPromedios == null)
            {
                gridPromedioAlumno.Caption = "No se encontraron resultados";
                return;
            }
            gridPromedioAlumno.DataSource = listaPromedios;
            gridPromedioAlumno.DataBind();
        }

        protected void txtPartidaNacimiento0_TextChanged(object sender, EventArgs e)
        {

        }


        private void LimpiarPanelIngresoNota()
        {
            LabelCodigoNota.Text = "";
            LabelNombreNota.Text = "";
            LabelEspecialidadNota.Text = "";
            LabelCursosNota.Text = "";
            comboCiclos.Items.Clear();
            txtNota.Text = "";
            txtObservacion.Text = "";
        }


        protected void gridListaDesaprobados_SelectedIndexChanged(object sender, EventArgs e)
        {

            String IDNota = gridListaDesaprobados.SelectedRow.Cells[0].Text;
            String Condicion = gridListaDesaprobados.SelectedRow.Cells[6].Text;

            String Condicion2 = HttpUtility.HtmlDecode(gridListaDesaprobados.SelectedRow.Cells[6].Text);


            if (!Condicion.Equals("&nbsp;"))
            {
               // ScriptManager.RegisterStartupScript(this, this.GetType(), "script", "alert('" + "Este cursos tiene la condicion :" + Condicion + "');", true);
                // return;
            }


            Nota notaseleccionada = notades.obtenerNota(IDNota);

            NotaDesaprobados_BL nota_bl = new NotaDesaprobados_BL();
            Int32 CantidadDeJalados= nota_bl.CantidadDeVecesJalados(notaseleccionada.Alumno.ID, notaseleccionada.Especialidad.ID, notaseleccionada.Curso.ID);
            if (CantidadDeJalados>=3)
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "script", "alert('" + "El alumno ya llevo este curso 3 veces" + Condicion + "');", true);
                return;
            }


            LimpiarPanelIngresoNota();

            if (notaseleccionada == null) { return; }
            if (notaseleccionada.Alumno == null) { return; }

            LabelIDNota.Text = notaseleccionada.ID;
            LabelCodigoNota.Text = notaseleccionada.Alumno.ID;
            LabelNombreNota.Text = notaseleccionada.Alumno.APEPAT + " " + notaseleccionada.Alumno.APEMAT + " ," + notaseleccionada.Alumno.NOMBRE;
            LabelEspecialidadNota.Text = notaseleccionada.Especialidad.DESCRIPCCION;
            LabelCursosNota.Text = notaseleccionada.Curso.DESCRIPCCION;

            SubsanarCursos_DAL subs = new SubsanarCursos_DAL();
            Int32 inicioCiclo = subs.CicloMinimo(notaseleccionada.Alumno.ID.ToString());
            Int32 finCiclo = subs.CicloMaximo(notaseleccionada.Alumno.ID.ToString());

            //Int32 inicioCiclo = Convert.ToInt32(gridPromedioAlumno.Rows[0].Cells[0].Text);
            //Int32 finCiclo = Convert.ToInt32(gridPromedioAlumno.Rows[gridPromedioAlumno.Rows.Count - 1].Cells[0].Text);


            for (int i = inicioCiclo; i <= 10; i++)
            {
                comboCiclos.Items.Add(i.ToString());
            }

            CargarComboSemestre(notaseleccionada.SEMESTRE);

            mpeAgregaNota.Show();


        }

        private void CargarComboSemestre(String SemestrePorDefecto) 
        {
            LabelErrorNota.Text = "";
            try
            {
                ComprobanteVenta_BL notas = new ComprobanteVenta_BL();
                comboSemestre.DataSource = notas.ObtenerPeriodos();
                comboSemestre.DataTextField = "Semestre";
                comboSemestre.DataValueField = "Semestre";
                comboSemestre.DataBind();
                comboSemestre.SelectedItem.Value = SemestrePorDefecto;
            }
            catch (Exception ex)
            {
                LabelErrorNota.Text = ex.Message;
            }
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            String IDNota = LabelIDNota.Text;
            Nota notaseleccionada = notades.obtenerNota(IDNota);

            NotaDesaprobados_BL nota_bl = new NotaDesaprobados_BL();
            Int32 CantidadDeJalados = nota_bl.CantidadDeVecesJalados(notaseleccionada.Alumno.ID, notaseleccionada.Especialidad.ID, notaseleccionada.Curso.ID);
            if (CantidadDeJalados >= 3)
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "script", "alert('" + "El alumno ya llevo este curso 3 veces" + "" + "');", true);
                return;
            }



            Nota nuevanota = (Nota)AyudaNHibernate.Copy(notaseleccionada);

            if (notaseleccionada == null) { return; }

            nuevanota.ID = "0";
            nuevanota.CICLOS = comboCiclos.Text;
            nuevanota.FINAL = Convert.ToInt32(txtNota.Text);

            nuevanota.TIPOCUR = "10";
            nuevanota.OBSERV = txtObservacion.Text;

            nuevanota.SEMESTRE_COMPLEMENTARIO = notaseleccionada.SEMESTRE;
            nuevanota.ESPECI_COMPLEMENTARIO = notaseleccionada.Especialidad.ID;
            nuevanota.CURSOS_COMPLEMENTARIO = notaseleccionada.Curso.ID;
            nuevanota.CODIPN_COMPLEMENTARIO = notaseleccionada.Alumno.ID;
            nuevanota.ITEM = "100";
            nuevanota.SEMESTRE = comboSemestre.Text;


            NotaComplementaria notac = new NotaComplementaria();
            notac.ID = "0";
            notac.Periodo = nuevanota.SEMESTRE;
            notac.Especialidad = nuevanota.Especialidad;
            notac.CICLOS = nuevanota.CICLOS;
            notac.CREDIT = Convert.ToInt32(nuevanota.CREDIT_COMPLEM);
            notac.Curso = nuevanota.Curso;
            notac.Alumno = nuevanota.Alumno;
            notac.FINAL = nuevanota.FINAL;
            notac.FechaActualizacion = DateTime.Now;
            notac.OBSERV = nuevanota.OBSERV;
            notac.shortname = nuevanota.Curso.DESCRIPCCION;
            notac.CICLOACT = nuevanota.CICLOS;
            notac.TOTACU = ((nuevanota.FINAL * notaseleccionada.CREDIT_COMPLEM)-(notaseleccionada.FINAL * notaseleccionada.CREDIT_COMPLEM));

            notades.InsertarNotaNueva(nuevanota, notac);



            ReporteNominaComplementaria_BL rep = new ReporteNominaComplementaria_BL();
            if (nuevanota.FINAL > 10)
            {
                rep.ActualizarFlagNotasDesaprobados(nuevanota.Alumno.ID, nuevanota.Curso.ID, 1);
            }
            else {
                rep.ActualizarFlagNotasDesaprobados(nuevanota.Alumno.ID, nuevanota.Curso.ID, 0);
            }
            

            RefrescarTablas();
            mpeAgregaNota.Hide();

        }


        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            mpeAgregaNota.Hide();
        }

        protected void gridListaDesaprobados_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
                e.Row.Cells[4].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[5].HorizontalAlign = HorizontalAlign.Right;

        }

        protected void gridPromedioAlumno_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
                e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[2].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[3].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[4].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[5].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[6].HorizontalAlign = HorizontalAlign.Right;

        }

    }
}